{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/felarof99/roadrunner-fork/blob/main/%F0%9F%A6%8A__Llama3_1_8b_on_Free_Colab_TPU.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "To run this, press \"*Runtime*\" and press \"*Run all*\" on a **free** Google Colab TPU!\n",
        "<div class=\"align-center\">\n",
        "  <a href=\"https://github.com/felafax/felfax\"><img src=\"https://felafax.ai/felafax.svg\" width=\"145\"></a></a> ⭐ <i>Star us on <a href=\"https://github.com/felafax/felafax\">Github</a> </i> ⭐ and email us founders@felafax.ai for any questions!\n",
        "</div>"
      ],
      "metadata": {
        "id": "TYiKDjBFjaX-"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Setup"
      ],
      "metadata": {
        "id": "Wk3kTwlqjVG5"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "!pip install --upgrade git+https://github.com/felafax/felafax -q\n",
        "!pip uninstall -y tensorflow && pip install tensorflow-cpu -q"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Cb4zyReNm7LS",
        "outputId": "1b3cfb91-eae7-4266-c1c0-7ab72fd65db6"
      },
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "  Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
            "  Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
            "  Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
            "\u001b[33mWARNING: Skipping tensorflow as it is not installed.\u001b[0m\u001b[33m\n",
            "\u001b[0m"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "id": "Yfuv1bwo6uPP",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "584b967a-5a91-451d-e26d-ed9956213f9f"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Reloaded all felafax modules.\n"
          ]
        }
      ],
      "source": [
        "import os\n",
        "os.environ['CUDA_VISIBLE_DEVICES'] = ''\n",
        "import sys\n",
        "import importlib\n",
        "from typing import (Any, Dict, List, Mapping, Optional, Sequence, Tuple,\n",
        "                    Union)\n",
        "\n",
        "# Add the parent directory of the current working directory to the Python path\n",
        "sys.path.append(os.path.abspath(os.path.join(os.getcwd(), '.')))\n",
        "sys.path.append(os.path.abspath(os.path.join(os.getcwd(), '..')))\n",
        "\n",
        "import llama3_jax\n",
        "from llama3_jax.trainer_engine import setup\n",
        "setup.setup_environment(base_dir=\"/\")\n",
        "\n",
        "from llama3_jax.trainer_engine import (automodel_lib, checkpoint_lib,\n",
        "                                       convert_lib, dataset_lib, jax_utils, llama_config,\n",
        "                                       trainer_lib, utils)\n",
        "setup.reload_modules(\"llama3_jax\")\n",
        "\n",
        "import jax\n",
        "import jax.numpy as jnp\n",
        "import chex\n",
        "import optax\n",
        "\n",
        "import torch\n",
        "from datasets import load_dataset\n"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Step 0: Configure LoRA params and precision for training (jnp.bfloat16 or jnp.float32)"
      ],
      "metadata": {
        "id": "dYv1s-cRk7_m"
      }
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {
        "id": "D0AaGj9Y6uPQ"
      },
      "outputs": [],
      "source": [
        "MODEL_NAME = \"colab-llama-3.1-8B-Instruct-JAX\""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 104,
          "referenced_widgets": [
            "41f656b1cad54007b1d9b423f852a1ce",
            "4dda48de5a3544ec829f6fbadb4e465f",
            "d43cab4931ce4dae854709b59fd05c51",
            "68691c3a527c4074a88730e2836ce6ac",
            "f5b4639d83b4470d81e8dcb3a2bd8a6d",
            "c62a1fe12de84253bb9ceb61ba0aaa6d",
            "b3f00d7149b8441985ffc77e889cf74d",
            "58ea3734fd6b4421bdf7f8bfcb49d764",
            "205bbcde824f419bb235e109f080dd4e",
            "8316b5a6ae1547c29f48d4c63e3ffb32",
            "902f932911924dcc9067c715bb11e3bc"
          ]
        },
        "id": "IDbUl_n86uPQ",
        "outputId": "d643431d-ffa6-4416-c073-8afd7bf8974b"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Downloading model colab-llama-3.1-8B-Instruct-JAX...\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Fetching 9 files:   0%|          | 0/9 [00:00<?, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "41f656b1cad54007b1d9b423f852a1ce"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "colab-llama-3.1-8B-Instruct-JAX was downloaded to /hf/models--felafax--colab-llama-3.1-8B-Instruct-JAX/snapshots/63234acd3cbc6c72c47054ba0d902969811d833c/llama-3.1-8B-Instruct-JAX.flax.\n"
          ]
        }
      ],
      "source": [
        "model_path, model, model_configurator, tokenizer = (\n",
        "    automodel_lib.AutoJAXModelForCausalLM.from_pretrained(\n",
        "        MODEL_NAME,\n",
        "        dtype=jnp.bfloat16,\n",
        "        param_dtype=jnp.bfloat16,\n",
        "        lora_rank=8,\n",
        "        lora_alpha=16,))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_FF_dm7z6uPQ"
      },
      "source": [
        "# Step 1: prepare the dataset"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "For this colab, we're utilizing the refined **Alpaca dataset**, curated by yahma. This dataset is a carefully filtered selection of 52,000 entries from the original Alpaca collection. Feel free to substitute this section with your own data preparation code if you prefer.\n",
        "\n",
        "It's crucial to include the EOS_TOKEN (End of Sequence Token) in your tokenized output. Failing to do so may result in endless generation loops."
      ],
      "metadata": {
        "id": "UbhxTAqYlXq3"
      }
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "metadata": {
        "id": "qDNqdmrp6uPQ"
      },
      "outputs": [],
      "source": [
        "def get_dataset(*, tokenizer, batch_size=1, seq_length=32, max_examples=None):\n",
        "    # Define Alpaca prompt template\n",
        "    alpaca_prompt = \"\"\"Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n",
        "\n",
        "    ### Instruction: {}\n",
        "\n",
        "\n",
        "    ### Input: {}\n",
        "\n",
        "    ### Response: {}\"\"\"\n",
        "\n",
        "    EOS_TOKEN = tokenizer.eos_token\n",
        "\n",
        "    # Defines formatting function.\n",
        "    def _format_prompts(examples):\n",
        "        instructions = examples[\"instruction\"]\n",
        "        inputs = examples[\"input\"]\n",
        "        outputs = examples[\"output\"]\n",
        "        texts = []\n",
        "        for instruction, input, output in zip(instructions, inputs, outputs):\n",
        "            text = alpaca_prompt.format(instruction, input, output) + EOS_TOKEN\n",
        "            texts.append(text)\n",
        "        return {\"text\": texts}\n",
        "\n",
        "    def _tokenize(examples):\n",
        "        tokenized = tokenizer(examples[\"text\"], truncation=True, padding=\"max_length\", max_length=seq_length+1)\n",
        "        return {\n",
        "            'input_tokens': [input_id[:-1] for input_id in tokenized['input_ids']],\n",
        "            'target_tokens': [input_id[1:] for input_id in tokenized['input_ids']],\n",
        "            'loss_masks': [input_id[1:] for input_id in tokenized['attention_mask']]\n",
        "        }\n",
        "\n",
        "    def _custom_collate_fn(batch: List[Dict[str, Any]]) -> Dict[str, jnp.ndarray]:\n",
        "        \"\"\"\n",
        "        Collates batch items and converts to JAX arrays.\n",
        "        \"\"\"\n",
        "        collated = {\n",
        "            'input_tokens': [],\n",
        "            'target_tokens': [],\n",
        "            'loss_masks': []\n",
        "        }\n",
        "        for item in batch:\n",
        "            for key in collated:\n",
        "                collated[key].append(item[key])\n",
        "        jax_batch = {}\n",
        "        for key, value in collated.items():\n",
        "            jax_batch[key] = jnp.array(value)\n",
        "        return jax_batch\n",
        "\n",
        "    # Load and preprocess the dataset\n",
        "    dataset = load_dataset(\"yahma/alpaca-cleaned\", split=\"train\")\n",
        "    if max_examples:\n",
        "        dataset = dataset.select(range(max_examples))\n",
        "    dataset = dataset.map(_format_prompts, batched=True)\n",
        "\n",
        "    # Create train and test dataset.\n",
        "    ds = dataset.train_test_split(test_size=0.15)\n",
        "    for split in ['train', 'test']:\n",
        "        ds[split] = ds[split].map(_tokenize, batched=True, remove_columns=dataset.column_names)\n",
        "\n",
        "    # Create DataLoaders\n",
        "    dataloader_args = dict(shuffle=True, batch_size=batch_size, collate_fn=_custom_collate_fn)\n",
        "    train_dataloader = torch.utils.data.DataLoader(ds['train'], **dataloader_args)\n",
        "    test_dataloader = torch.utils.data.DataLoader(ds['test'], **dataloader_args)\n",
        "\n",
        "    return train_dataloader, test_dataloader"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Uncomment below code ⬇️ if you'd like to run and test 💯 your dataset pipeline.\n",
        "\n"
      ],
      "metadata": {
        "id": "MaxHZh7zlhRH"
      }
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "metadata": {
        "id": "3nd25pbO6uPQ"
      },
      "outputs": [],
      "source": [
        "# def test_dataset_pipeline(tokenizer):\n",
        "#     \"\"\"Print shapes of first batch to verify dataset pipeline.\"\"\"\n",
        "#     train_loader, _ = get_dataset(tokenizer=tokenizer, batch_size=1, seq_length=32, max_examples=32)\n",
        "#     batch = next(iter(train_loader))\n",
        "\n",
        "#     print(\"Input tokens shape:\", batch['input_tokens'].shape)\n",
        "#     print(\"Target mask shape:\", batch['target_tokens'].shape)\n",
        "# test_dataset_pipeline(tokenizer)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "vtyzzGEh6uPQ"
      },
      "source": [
        "# Step 2: Configure hyperparameters below and train!"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "@chex.dataclass(frozen=True)\n",
        "class TrainerConfig:\n",
        "    # dataset pipeline knobs\n",
        "    batch_size: int = 8\n",
        "    seq_length: int = 32\n",
        "    dataset_size_limit: int | None = None\n",
        "\n",
        "    # training pipeline knobs\n",
        "    learning_rate: float = 1e-3\n",
        "    num_epochs: int = 1\n",
        "    max_steps: int | None = 20\n",
        "\n",
        "    print_every_n_steps: int = 5\n",
        "\n",
        "    # eval\n",
        "    eval_every_n_steps: int = 1000\n",
        "    max_eval_steps: int | None = 1\n",
        "\n",
        "\n",
        "trainer_config = TrainerConfig()\n",
        "optimizer = optax.sgd(trainer_config.learning_rate)\n"
      ],
      "metadata": {
        "id": "lX0kBNsLa7d1"
      },
      "execution_count": 29,
      "outputs": []
    },
    {
      "cell_type": "code",
      "execution_count": 30,
      "metadata": {
        "id": "WzsU9acF6uPR",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 113,
          "referenced_widgets": [
            "14f9ffcb3aca49a18b7f6b47edee1426",
            "0ca68d2a9f004d5eb8b5875d197ec8f2",
            "d59cb7434e2441238392b3825e66ac7e",
            "73bb285392d94f27a4a1e067cb4b37af",
            "68588fa1c7d64b6e9f3265eeac2e5ccd",
            "ef441d903f184d6295689be165866584",
            "ce7d4d113ce8467fbc8c6d8ed4887587",
            "c38c7e207bab409da4540067dbc79c97",
            "69c7e26f36db457289e91bfa9a40131f",
            "9b9bcdfe107049ab9466e3515cb0db47",
            "a67a5cce96c7402aa368af08b4a60d18",
            "36d5768ca10d4e55a065083094a5bd0f",
            "2eef59358ac64380b9fbc9571839eee2",
            "17ea86cc3ce640caa19b1e7e51398e3a",
            "fbec793c16804e15aa14f73d1385aa51",
            "1aa9bd870ede47799d86333d3d619ab9",
            "c3bc7e02e3e544409269dd73f7912fd8",
            "8563f4de561a44e995120f9ed6fa1e94",
            "3a9ae9f3ff2846bda0df4faf4f906c91",
            "a6352f62df2c4594b599afbea30a6b2a",
            "a7f634267bed43229ad43100a0191195",
            "4f24fbd16ebe4bc19d0fa285e8950a65",
            "b3384df992184a56a522f797115daeda",
            "551121b1346e44c59a4d695133711c49",
            "f40316ade36e40409fa15c65a660ac96",
            "44238c94f7fc4c4cbef35dcdc89e1c72",
            "a967af69767049d4bbfcd530106a4534",
            "9a32cb55109b485196a57dbbf235cfe8",
            "8478774b80cf4e7a80cbb90f68ea92a2",
            "d3143f9d95314d7c9fcd89899320b8cd",
            "fc50d9541a6e43cdac7e58645c8286c5",
            "9de23acb71b5425b8d96367f36c1ee6c",
            "7b49dd1dc67f47e5a9e3326ff17f2295"
          ]
        },
        "outputId": "0fa13ec4-7982-4f77-a0a6-f2c020036d82"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Map:   0%|          | 0/51760 [00:00<?, ? examples/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "14f9ffcb3aca49a18b7f6b47edee1426"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Map:   0%|          | 0/43996 [00:00<?, ? examples/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "36d5768ca10d4e55a065083094a5bd0f"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Map:   0%|          | 0/7764 [00:00<?, ? examples/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "b3384df992184a56a522f797115daeda"
            }
          },
          "metadata": {}
        }
      ],
      "source": [
        "# Prepare dataset\n",
        "train_dataloader, val_dataloader = get_dataset(\n",
        "    tokenizer=tokenizer,\n",
        "    batch_size=trainer_config.batch_size,\n",
        "    seq_length=trainer_config.seq_length,\n",
        "    max_examples=trainer_config.dataset_size_limit\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Print training information\n",
        "trainer_lib.pprint_training_pipeline(train_dataloader, trainer_config)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Gcm2LHHQcnHs",
        "outputId": "5ae978b0-a116-46cf-9539-7b7193d6aa77"
      },
      "execution_count": 31,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Training Configuration Summary:\n",
            "Total samples: 43996\n",
            "Batch size: 8\n",
            "Number of epochs: 1\n",
            "Steps per epoch: 5500\n",
            "Total training steps: 20\n",
            "*Note*: Total steps limited by max_steps setting (20)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 32,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "zyMTNYKJ6uPR",
        "outputId": "7109d72b-e0f9-4f7e-dee0-2839039df7da"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Loading causal language model with dtype <class 'jax.numpy.bfloat16'>...\n"
          ]
        }
      ],
      "source": [
        "trainer = trainer_lib.CausalLMTrainer(\n",
        "    model_name=MODEL_NAME,\n",
        "    model=model,\n",
        "    model_ckpt_path=model_path,\n",
        "    model_configurator=model_configurator,\n",
        "    optimizer=optimizer,\n",
        "    training_config=trainer_config,\n",
        "    mesh=jax_utils.MESH,\n",
        "    dtype=jnp.bfloat16,  # precision to use for training\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "state = trainer.train(train_dataloader, val_dataloader, run_jitted=False)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "PtZxDbB1vl6O",
        "outputId": "5944d994-5d83-4923-92a1-b2d7ea7f781e"
      },
      "execution_count": 33,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Starting epoch 0 of training...\n",
            "Epoch 0, Step 0, Train Loss: 3.7606, Accuracy: 0.3438\n",
            "Epoch 0, Step 5, Train Loss: 3.3515, Accuracy: 0.3438\n",
            "Epoch 0, Step 10, Train Loss: 2.7629, Accuracy: 0.4375\n",
            "Epoch 0, Step 15, Train Loss: 2.2916, Accuracy: 0.5000\n",
            "Epoch 0, Step 20, Train Loss: 1.5016, Accuracy: 0.6562\n"
          ]
        }
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.10.14"
    },
    "colab": {
      "provenance": [],
      "gpuType": "V28",
      "include_colab_link": true
    },
    "accelerator": "TPU",
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "41f656b1cad54007b1d9b423f852a1ce": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_4dda48de5a3544ec829f6fbadb4e465f",
              "IPY_MODEL_d43cab4931ce4dae854709b59fd05c51",
              "IPY_MODEL_68691c3a527c4074a88730e2836ce6ac"
            ],
            "layout": "IPY_MODEL_f5b4639d83b4470d81e8dcb3a2bd8a6d"
          }
        },
        "4dda48de5a3544ec829f6fbadb4e465f": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_c62a1fe12de84253bb9ceb61ba0aaa6d",
            "placeholder": "​",
            "style": "IPY_MODEL_b3f00d7149b8441985ffc77e889cf74d",
            "value": "Fetching 9 files: 100%"
          }
        },
        "d43cab4931ce4dae854709b59fd05c51": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_58ea3734fd6b4421bdf7f8bfcb49d764",
            "max": 9,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_205bbcde824f419bb235e109f080dd4e",
            "value": 9
          }
        },
        "68691c3a527c4074a88730e2836ce6ac": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_8316b5a6ae1547c29f48d4c63e3ffb32",
            "placeholder": "​",
            "style": "IPY_MODEL_902f932911924dcc9067c715bb11e3bc",
            "value": " 9/9 [00:00&lt;00:00, 768.19it/s]"
          }
        },
        "f5b4639d83b4470d81e8dcb3a2bd8a6d": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "c62a1fe12de84253bb9ceb61ba0aaa6d": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "b3f00d7149b8441985ffc77e889cf74d": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "58ea3734fd6b4421bdf7f8bfcb49d764": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "205bbcde824f419bb235e109f080dd4e": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "8316b5a6ae1547c29f48d4c63e3ffb32": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "902f932911924dcc9067c715bb11e3bc": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "14f9ffcb3aca49a18b7f6b47edee1426": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_0ca68d2a9f004d5eb8b5875d197ec8f2",
              "IPY_MODEL_d59cb7434e2441238392b3825e66ac7e",
              "IPY_MODEL_73bb285392d94f27a4a1e067cb4b37af"
            ],
            "layout": "IPY_MODEL_68588fa1c7d64b6e9f3265eeac2e5ccd"
          }
        },
        "0ca68d2a9f004d5eb8b5875d197ec8f2": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_ef441d903f184d6295689be165866584",
            "placeholder": "​",
            "style": "IPY_MODEL_ce7d4d113ce8467fbc8c6d8ed4887587",
            "value": "Map: 100%"
          }
        },
        "d59cb7434e2441238392b3825e66ac7e": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_c38c7e207bab409da4540067dbc79c97",
            "max": 51760,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_69c7e26f36db457289e91bfa9a40131f",
            "value": 51760
          }
        },
        "73bb285392d94f27a4a1e067cb4b37af": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_9b9bcdfe107049ab9466e3515cb0db47",
            "placeholder": "​",
            "style": "IPY_MODEL_a67a5cce96c7402aa368af08b4a60d18",
            "value": " 51760/51760 [00:00&lt;00:00, 108622.23 examples/s]"
          }
        },
        "68588fa1c7d64b6e9f3265eeac2e5ccd": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "ef441d903f184d6295689be165866584": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "ce7d4d113ce8467fbc8c6d8ed4887587": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "c38c7e207bab409da4540067dbc79c97": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "69c7e26f36db457289e91bfa9a40131f": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "9b9bcdfe107049ab9466e3515cb0db47": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "a67a5cce96c7402aa368af08b4a60d18": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "36d5768ca10d4e55a065083094a5bd0f": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_2eef59358ac64380b9fbc9571839eee2",
              "IPY_MODEL_17ea86cc3ce640caa19b1e7e51398e3a",
              "IPY_MODEL_fbec793c16804e15aa14f73d1385aa51"
            ],
            "layout": "IPY_MODEL_1aa9bd870ede47799d86333d3d619ab9"
          }
        },
        "2eef59358ac64380b9fbc9571839eee2": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_c3bc7e02e3e544409269dd73f7912fd8",
            "placeholder": "​",
            "style": "IPY_MODEL_8563f4de561a44e995120f9ed6fa1e94",
            "value": "Map: 100%"
          }
        },
        "17ea86cc3ce640caa19b1e7e51398e3a": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_3a9ae9f3ff2846bda0df4faf4f906c91",
            "max": 43996,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_a6352f62df2c4594b599afbea30a6b2a",
            "value": 43996
          }
        },
        "fbec793c16804e15aa14f73d1385aa51": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_a7f634267bed43229ad43100a0191195",
            "placeholder": "​",
            "style": "IPY_MODEL_4f24fbd16ebe4bc19d0fa285e8950a65",
            "value": " 43996/43996 [00:28&lt;00:00, 1654.18 examples/s]"
          }
        },
        "1aa9bd870ede47799d86333d3d619ab9": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "c3bc7e02e3e544409269dd73f7912fd8": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "8563f4de561a44e995120f9ed6fa1e94": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "3a9ae9f3ff2846bda0df4faf4f906c91": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "a6352f62df2c4594b599afbea30a6b2a": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "a7f634267bed43229ad43100a0191195": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "4f24fbd16ebe4bc19d0fa285e8950a65": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "b3384df992184a56a522f797115daeda": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_551121b1346e44c59a4d695133711c49",
              "IPY_MODEL_f40316ade36e40409fa15c65a660ac96",
              "IPY_MODEL_44238c94f7fc4c4cbef35dcdc89e1c72"
            ],
            "layout": "IPY_MODEL_a967af69767049d4bbfcd530106a4534"
          }
        },
        "551121b1346e44c59a4d695133711c49": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_9a32cb55109b485196a57dbbf235cfe8",
            "placeholder": "​",
            "style": "IPY_MODEL_8478774b80cf4e7a80cbb90f68ea92a2",
            "value": "Map: 100%"
          }
        },
        "f40316ade36e40409fa15c65a660ac96": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_d3143f9d95314d7c9fcd89899320b8cd",
            "max": 7764,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_fc50d9541a6e43cdac7e58645c8286c5",
            "value": 7764
          }
        },
        "44238c94f7fc4c4cbef35dcdc89e1c72": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_9de23acb71b5425b8d96367f36c1ee6c",
            "placeholder": "​",
            "style": "IPY_MODEL_7b49dd1dc67f47e5a9e3326ff17f2295",
            "value": " 7764/7764 [00:04&lt;00:00, 1622.00 examples/s]"
          }
        },
        "a967af69767049d4bbfcd530106a4534": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "9a32cb55109b485196a57dbbf235cfe8": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "8478774b80cf4e7a80cbb90f68ea92a2": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "d3143f9d95314d7c9fcd89899320b8cd": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "fc50d9541a6e43cdac7e58645c8286c5": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "9de23acb71b5425b8d96367f36c1ee6c": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "7b49dd1dc67f47e5a9e3326ff17f2295": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        }
      }
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}